package Polymorphic.PolymorphDemo001;

/**
 * ClassName:Polymoph
 * Package:Polymorphic
 * Description:
 *
 * @Author:ZhangXin
 * @Create2023/1/24-10:31
 * @Version:v1.0
 */
public class PolymorphText001 {
    /*
     * 1.什么是多态
     *   同类型的对象,表现出的不用形态
     *
     * 2.多态的表现形式
     *   父类类型  对象名称 = 子类对象
     *
     * 3.多态的前提
     *   有继承关系/实现关系
     *   有父类引用指向子类对象
     *   有方法重写
     *
     * 4.多态的好处
     *   使用父类型作为参数,可以接收所有子类对象
     *   体现多态的扩展性与便利
     *
     * 5.多态调用成员的特点
     *   变量调用：编译看左边.运行也看左边
     *   (编译看左边:javac编译代码的时候,会看左边的父类中有没有这个变量,如果有,编译成功,如果没有,编译失败)
     *   方法调用：编译看左边.运行右边
     *
     * 6.多态的优势
     *   在多态形式下,右边对象可以实现解耦合,便于扩展和维护
     *   定义方法的时候,使用父类型作为参数,可以接收所有子类对象,体现多态的扩展性与便利
     *
     * 7.多态的弊端
     *   不能调用子类的特有功能(当调用成员方法的时候,编译看左边,运行看右边)
     *   (那么在编译的的时候会先检查左边的父类中有没有这个方法,如果没有直接报错)
     */
//新特性(先判断a是否为Dog类型,如果是,则强转成Dog类型,转换之后变量名为d,如果不是,则不强转,结果直接是false)
//     强制类型转换
//     if(a instanceof Dog d){
//         d.lookHome();
//    }else if(a instanceof Cat c){
//         c.catchMouse();
//    }else{
//        System.out.println("没有这个类型");
//    }
}
